package com.jml.二期.ArrayList001;

import com.jml.二期.ArrayList001.ext.JmlArraylist;
import java.util.ArrayList;


public class ListTest {
    public static void main(String[] args) {
//        // 1.Arraylist集合源码 Vectornew
        ArrayList<String> list = new ArrayList<String>();
        list.add("蚂蚁课堂001");
////        System.out.println(list.get(0));
//        list.remove(1);

        /**
         * 作业题：对我们的Arraylist每段代码加上白话文注释
         *
         * 源码分析
         *
         * 思路：
         *
         * Java集合底层是采用那些数据结构存放的呢？
         * 数组 存放我们的数据 数组是一个object类型
         *
         * 数组结构有那些特征： 保证我们的有序性 随机查询效率非常高  缺点： 曾删除改效率非常低
         *
         * List Set Map 底层 都会采用数组存放我们的数据 数组+链表+红黑树
         * 空数组 添加数据 数组大小是不是加1
         *
         */

//        // Arrays.copyOf(elementData, newCapacity);
//        Object[] elementData = {"1", "2", "3"};
//        System.out.println("数组扩容前:");
//        for (int i = 0; i < elementData.length; i++) {
//            System.out.println("elementData:" + elementData[i]);
//        }
//        int newCapacity = 10;
//        // 对我们之前的数组实现扩容
//        Object[] objects = Arrays.copyOf(elementData, newCapacity);
//        System.out.println("数组扩容后:" + objects);
//        for (int i = 0; i < objects.length; i++) {
//            System.out.println("objects:" + objects[i]);
//        }
//        /**
//         *   //Arrays.copyOf(elementData, newCapacity);作用：
//         *   对我们数组实现扩容，将我们以前旧数据赋值到我们新的数组中
//         */
        JmlArraylist<String> stringJmlArraylist = new JmlArraylist<String>();

        for (int i = 0; i < 10; i++) {
            stringJmlArraylist.add("蚂蚁课堂就是牛逼!" + i);
        }
        stringJmlArraylist.add("蚂蚁课堂就是牛逼!11");

        System.out.println("删除数据之前:");
        for (int i = 0; i < stringJmlArraylist.size(); i++) {
            System.out.println(stringJmlArraylist.get(i));
        }
//        // 下一次数组扩容是在什么时候呢？
        stringJmlArraylist.remove(2);
        System.out.println("删除数据之后:");
        for (int i = 0; i < stringJmlArraylist.size(); i++) {
            System.out.println(stringJmlArraylist.get(i));
        }
//        // 数组的下标为0 开始 删除第一条数据 10=11
//        System.out.println(stringJmlArraylist.get(10));


    }
}
